/********************************************************************************
    Author :
********************************************************************************/

/********************************************************************************
    Include Files :
********************************************************************************/
#include "extern.h"
    #include "interrupt_manager.h"
    #include "sdk_project_config.h"
#include "alloc.h"
	#include "Interrupt.h"
/********************************************************************************
    Defination :
********************************************************************************/

/********************************************************************************
    Comment : The PORT of Button
********************************************************************************/
#define KEY1_PORT PTC
#define KEY2_PORT PTC
/********************************************************************************
    Comment : The PIN of Button
********************************************************************************/
#define KEY1_PIN (uint8)12
#define KEY2_PIN (uint8)13

/********************************************************************************
    Type name :
********************************************************************************/

/********************************************************************************
    Comment : The description of type name
********************************************************************************/

/********************************************************************************
    Private variables :
********************************************************************************/

/********************************************************************************
    Comment : Check the key is pressed or not
********************************************************************************/
PRIVATE boolean bKey1Press = FALSE;
PRIVATE boolean bKey2Press = FALSE;
/********************************************************************************
    Private function declaration :
********************************************************************************/
PRIVATE FUNC(void,INTERRUPT_CODE) Interrupt_vidKey(void);
/********************************************************************************
    Public function :
********************************************************************************/

/********************************************************************************
    Description :
        The initial function of interrupt
********************************************************************************/
PUBLIC FUNC(void,INTERRUPT_CODE) Interrupt_vidInitFunction(void)
{
    INT_SYS_InstallHandler(PORTC_IRQn,&Interrupt_vidKey,NULL);
    INT_SYS_EnableIRQ(PORTC_IRQn);
}


/********************************************************************************
    Description :
        If there is rising edge of key1
********************************************************************************/
PUBLIC FUNC(boolean,INTERRUPT_CODE) Interrupt_bGetKey1Trigger(void)
{
    return bKey1Press;
}

/********************************************************************************
    Description :
        If there is rising edge of key2
********************************************************************************/
PUBLIC FUNC(boolean,INTERRUPT_CODE) Interrupt_bGetKey2Trigger(void)
{
    return bKey2Press;
}

/********************************************************************************
    Description :
        Check the flag of interrupt about key1
********************************************************************************/
PUBLIC FUNC(void,INTERRUPT_CODE) Interrupt_vidClearKey1Trigger(void)
{
    bKey1Press = FALSE;
}

/********************************************************************************
    Description :
        Check the flag of interrupt about key2
********************************************************************************/
PUBLIC FUNC(void,INTERRUPT_CODE) Interrupt_vidClearKey2Trigger(void)
{
    bKey2Press = FALSE;
}
/********************************************************************************
    Private function :
********************************************************************************/

/********************************************************************************
    Description :
        Check which key is pressed
********************************************************************************/
PRIVATE FUNC(void,INTERRUPT_CODE) Interrupt_vidKey(void)
{
    uint32_t u32KeyTrigger = PINS_DRV_GetPortIntFlag(PORTC);

	if( ((u32KeyTrigger >> KEY1_PIN) & (0x01)) == TRUE)
	{
		bKey1Press = TRUE;
	}
	if( ((u32KeyTrigger >> KEY2_PIN) & (0x01)) == TRUE)
	{
		bKey2Press = TRUE;
	}
    
    PINS_DRV_ClearPortIntFlagCmd(PORTC);
}